package thinkingJava.chapter15;
class HoldItem<T> {
	T item;
	HoldItem(T item) {
		this.item = item;
	}
	T getItem() {
		return item;
	}
}
class Colored2<T extends HasColor> extends HoldItem<T> {
	Colored2(T item) {
		super(item);
	}
	java.awt.Color getColor() {
		return item.getColor();
	}
}
class ColoredDimension2<T extends Dimension & HasColor> extends Colored2<T> {
	ColoredDimension2(T item) {
		super(item);
	}
	int getX() {return item.x;}
	int getY() {return item.y;}
	int getZ() {return item.z;}
}
class Solid2<T extends Dimension & HasColor & Weight> extends ColoredDimension2<T> {

	Solid2(T item) {
		super(item);
	}
	int weight() {
		return item.weight();
	}
}
public class InheritBounds {
	public static void main(String[] args) {
		Solid2<Bounded> solid2 = new Solid2<Bounded>(new Bounded());
		solid2.getColor();
		solid2.weight();
		solid2.getZ();
	}
}
